﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; using Montana.Entidades;

namespace Montana
{
    public partial class frmCliente : Form
    {
        bool modificando = false;
        string codigoOriginal = "";
        int idActual;

        public frmCliente()
        {
            InitializeComponent();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (!Validar())
                return;

            Cliente cli = new Cliente();
            ArmarObjeto(cli);

            if (modificando)
                cli.Modificar();
            else
                cli.Nuevo();
                        
            modificando = false;
            this.Tag = null;
            
            Limpiar();

            txtCodigo.Focus();

            System.Threading.Thread.Sleep(500);
            CargarLista();            
        }

        private bool Validar()
        {
            if (Validacion.EstaVacio(txtCodigo, "Debe ingresar el código"))
                return false;

            if (Validacion.EstaVacio(txtNombre, "Debe ingresar el nombre"))
                return false;

            if (!modificando || codigoOriginal != txtCodigo.Text)
            {
                Cliente cli = new Cliente();
                if (cli.ExisteCodigo(txtCodigo.Text))
                {
                    Validacion.MostrarError(txtCodigo, "El código ingresado ya existe");
                    return false;
                }
            }

            if (Validacion.EstaVacio(cboCondicionIVA, "Debe ingresar la condición de IVA"))
                return false;

            return true;
        }

        private void ArmarObjeto(Cliente o)
        {
            o.ID = idActual;
            o.Codigo = txtCodigo.Text;
            o.Nombre = txtNombre.Text;
            o.Direccion = txtDireccion.Text;
            o.IDLocalidad = Validacion.GetValue(cboLocalidad);
            o.Telefono = txtTelefono.Text;
            o.EMail = txtEMail.Text;
            o.Contacto = txtContacto.Text;
            
            o.IDCondicioniva = Validacion.GetValue(cboCondicionIVA);
            o.IDTipocliente = Validacion.GetValue(cboTipoCliente);
            o.CUIT = txtCUIT.Text;

            o.Nombrefantasia = txtNombreFantasia.Text;
            o.Direccionfiscal = txtDireccionFiscal.Text;
            o.IDLocalidadfiscal = Validacion.GetValue(cboLocalidadFiscal);
            o.Expreso = txtExpreso.Text;
            o.Horarioatencion = txtHorarioAtencion.Text;
            o.Precioresago = Validacion.ValDecimal(txtPrecioResago);

            o.Saldo = Validacion.ValDecimal(txtSaldo);
            o.Saldo2 = Validacion.ValDecimal(txtSaldo2);
            o.Saldokg = Validacion.ValDecimal(txtSaldoKg);
            o.Saldokg2 = Validacion.ValDecimal(txtSaldoKg2);
        }

        #region Load
        private void frmCliente_Load(object sender, EventArgs e)
        {
            CrearColumnas();

            CargarLista();

            CondicionIVA iva = new CondicionIVA();
            iva.CargarCombo(cboCondicionIVA, true);

            TipoCliente tc = new TipoCliente();
            tc.CargarCombo(cboTipoCliente, true);

            Provincia p = new Provincia();
            p.CargarCombo(cboProvincia, true);
            p.CargarCombo(cboProvinciaFiscal, true);
        }
        #endregion

        private void GuardarProv(string nombre)
        {
            Provincia prov = new Provincia();

            prov.Nombre = nombre;

            prov.Guardar();
        }

        private void GuardarLocalidad(string nombre, string cp, int idProvincia)
        {
            Localidad loc = new Localidad();
         
            loc.Nombre = nombre;
            loc.CP = cp;
            loc.IDProvincia = idProvincia;

            loc.Nuevo();
        }

        private void CrearColumnas()
        {
            lswLista.Columns.Add("Código");
            lswLista.Columns.Add("Nombre o razón social", 150);
            lswLista.Columns.Add("Dirección", 120);
            lswLista.Columns.Add("Localidad", 120);
            lswLista.Columns.Add("Provincia", 100);
            lswLista.Columns.Add("CUIT", 100);

            lswLista.Columns.Add("Condición IVA", 100);
            lswLista.Columns.Add("Tipo de cliente", 100);

            lswLista.Columns.Add("Teléfono", 100);
            lswLista.Columns.Add("E-Mail", 120);
            lswLista.Columns.Add("Contacto", 120);
        }

        private void CargarLista()
        {
            Cliente cli = new Cliente();
            IList<Cliente> items = cli.TraerTodos();

            CargarLista(items);
        }

        private void CargarLista(IList<Cliente> items)
        {
            lswLista.Items.Clear();
            foreach (Cliente item in items)
            {
                lswLista.Items.Add(item.Codigo);
                lswLista.Items[lswLista.Items.Count - 1].Tag = item;

                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Nombre);
                
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Direccion);                
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Localidad);
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Provincia);
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.CUIT);

                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Condicioniva);
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Tipocliente);


                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Telefono);
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.EMail);
                lswLista.Items[lswLista.Items.Count - 1].SubItems.Add(item.Contacto);
            }
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            if (txtBuscar.Text == "")
            {
                CargarLista();
                return;
            }

            Cliente cli = new Cliente();
            IList<Cliente> items = cli.BuscarPorNombre(txtBuscar.Text);

            CargarLista(items);

            if (lswLista.SelectedItems.Count != 0)
            {
                lswLista.Select();
                lswLista.Items[0].Selected = true;
            }
        }

        private void lswLista_Click(object sender, EventArgs e)
        {
            if (lswLista.SelectedItems.Count == 0)
                return;

            Cliente o = (Cliente)lswLista.SelectedItems[0].Tag;

            this.Tag = o;

            Limpiar();

            modificando = true;

            codigoOriginal = o.Codigo;
            idActual = o.ID;

            txtCodigo.Text = o.Codigo;
            txtNombre.Text = o.Nombre;
            txtDireccion.Text = o.Direccion;
            cboProvincia.SelectedValue = o.IDProvincia.ToString();
            cboLocalidad.SelectedValue = o.IDLocalidad.ToString();
            txtTelefono.Text = o.Telefono;
            txtEMail.Text = o.EMail;
            txtContacto.Text = o.Contacto;
            txtCUIT.Text = o.CUIT;
            
            cboCondicionIVA.SelectedValue = o.IDCondicioniva.ToString();
            cboTipoCliente.SelectedValue = o.IDTipocliente.ToString();

            txtNombreFantasia.Text = o.Nombrefantasia;
            txtDireccionFiscal.Text = o.Direccionfiscal;
            cboProvinciaFiscal.SelectedValue = o.IDProvinciafiscal.ToString();
            cboLocalidadFiscal.SelectedValue = o.IDLocalidadfiscal.ToString();            
            txtExpreso.Text = o.Expreso;
            txtHorarioAtencion.Text = o.Horarioatencion;
            txtPrecioResago.Text = o.Precioresago.ToString("0.00");
            
            txtSaldo.Text = o.Saldo.ToString("0.00");
            txtSaldo2.Text = o.Saldo2.ToString("0.00");
            txtSaldoKg.Text = o.Saldokg.ToString("0.000");
            txtSaldoKg2.Text = o.Saldokg2.ToString("0.000");
        }

        private void Limpiar()
        {            
            txtCodigo.Text = "";
            txtNombre.Text = "";
            txtDireccion.Text = "";
            cboProvincia.SelectedIndex = -1;
            cboLocalidad.SelectedIndex = -1;
            txtTelefono.Text = "";
            txtEMail.Text = "";
            txtContacto.Text = "";
            cboCondicionIVA.SelectedIndex = -1;
            txtCUIT.Text = "";
            cboTipoCliente.SelectedIndex = -1;

            txtNombreFantasia.Text = "";
            txtDireccionFiscal.Text = "";
            cboProvinciaFiscal.SelectedIndex = -1;
            cboLocalidadFiscal.SelectedIndex = -1;
            txtExpreso.Text = "";
            txtHorarioAtencion.Text = "";
            txtPrecioResago.Text = "";

            txtSaldo.Text = "";
            txtSaldo2.Text = "";
            txtSaldoKg.Text = "";
            txtSaldoKg2.Text = "";            
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpiar();

            modificando = false;

            txtCodigo.Focus();
        }

        private void frmCliente_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {             
                case Keys.Escape:
                    btnCerrar_Click(this, null);
                    break;
                case Keys.F1:
                    btnGuardar_Click(this, null);
                    break;                           
                case Keys.F3:
                    txtBuscar.Focus();
                    break;           
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            DialogResult res = Validacion.MostrarMensaje("¿Borrar el cliente \"" + txtNombre.Text + "\"?", TipoMensaje.Pregunta);

            if (res == DialogResult.No)
                return;

            Cliente cli = new Cliente();
            cli.BorrarPorCodigo(txtCodigo.Text);

            Limpiar();

            CargarLista();

            txtCodigo.Focus();
        }

        private void cboListaPrecio_SelectedIndexChanged(object sender, EventArgs e)
        {
            //ListaPrecio l = (ListaPrecio)cboListaPrecio.SelectedItem;

            //if (l != null)
            //    Validacion.MostrarMensaje(l.Codigo);
        }

        private void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboProvincia.SelectedItem == null)
                return;

            this.Cursor = Cursors.WaitCursor;

            Localidad loc = new Localidad();
            int idProvincia = Validacion.GetValue(cboProvincia);

            loc.CargarCombo(cboLocalidad, loc.BuscarPorProvincia(idProvincia), true);

            this.Cursor = Cursors.Default;
        }

        private void lswLista_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Delete:
                    btnBorrar_Click(this, null);
                    break;
            }
        }

        private void cboProvinciaFiscal_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboProvinciaFiscal.SelectedItem == null)
                return;

            this.Cursor = Cursors.WaitCursor;

            Localidad loc = new Localidad();
            int idProvincia = Validacion.GetValue(cboProvinciaFiscal);

            loc.CargarCombo(cboLocalidadFiscal, loc.BuscarPorProvincia(idProvincia), true);

            this.Cursor = Cursors.Default;
        }

        private void lswLista_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
